'use strict';
const db = uniCloud.database();
const _ = db.command;
const crypto = require('crypto');

// 管理员登录云函数
exports.main = async (event, context) => {
  try {
    // 获取请求参数
    const { username, password } = event;
    
    // 验证请求参数
    if (!username || !password) {
      return {
        code: 400,
        message: '请输入账号和密码'
      };
    }
    
    // 查询管理员账号
    const adminCollection = db.collection('admin');
    
    const admin = await adminCollection.where({
      username: username.trim()
    }).get();
    console.log("管理",admin);
    // 检查管理员是否存在
    if (admin.data.length === 0) {
      return {
        code: 401,
        message: '账号或密码错误'+admin
      };
    }
    
    const adminInfo = admin.data[0];
    console.log("账号已被禁用账号已被禁用账号已被禁用",adminInfo);
    // 检查管理员是否被禁用
    if (!adminInfo.is_active) {
      return {
        code: 403,
        message: '账号已被禁用'+JSON.stringify(adminInfo)
      };
    }
    
    // 改进的密码验证
    // 支持加密密码验证，同时兼容原有明文密码
    let passwordValid = false;
    
    // 尝试使用MD5验证
    const hashedPassword = crypto.createHash('md5').update(password.trim()).digest('hex');
    if (adminInfo.password === hashedPassword) {
      passwordValid = true;
    }
    // 兼容原有的明文密码
    else if (adminInfo.password === password.trim()) {
      passwordValid = true;
    }
    
    if (!passwordValid) {
      return {
        code: 401,
        message: '账号或密码错误'
      };
    }
    
    // 生成更安全的管理员令牌
    const token = generateAdminToken(adminInfo._id);
    
    // 更新登录信息
    await adminCollection.doc(adminInfo._id).update({
      data: {
        lastLoginTime: new Date(),
        lastLoginIp: context.CLIENTIP || 'unknown',
        token: token
      }
    });
    
    // 尝试记录登录日志
    try {
      await db.collection('admin_logs').add({
        data: {
          admin_id: adminInfo._id,
          admin_name: adminInfo.username,
          action: 'login',
          ip: context.CLIENTIP || 'unknown',
          message: '管理员登录成功',
          create_time: Date.now()
        }
      });
    } catch (logErr) {
      console.log('记录登录日志失败，可能是表不存在:', logErr);
    }
    
    // 返回成功信息
    return {
      code: 0,
      message: '登录成功',
      token: token,
      adminInfo: {
        _id: adminInfo._id,
        username: adminInfo.username,
        role: adminInfo.role || 'admin',
        lastLoginTime: new Date()
      }
    };
    
  } catch (error) {
    console.error('管理员登录失败:', error);
    
    // 提供更详细的错误信息
    return {
      code: 500,
      message: '登录失败，请稍后重试',
      error: process.env.NODE_ENV === 'production' ? undefined : error.message
    };
  }
};

// 生成更安全的管理员令牌
function generateAdminToken(adminId) {
  const timestamp = Date.now();
  const randomStr = Math.random().toString(36).substring(2, 15);
  const data = `${adminId}-${timestamp}-${randomStr}`;
  return crypto.createHash('sha256').update(data).digest('hex');
}